Kongの基本的な機能を触って、Kong経由でEC2上のWebサーバにアクセスしてみた
こんにちは、ゲームソリューショングループのsoraです。
今回は、「Kongの基本的な機能を触って、Kong経由でEC2上のWebサーバにアクセスしてみた」ことについて書いていきます。
EC2にKongをインストールして、サービス追加やルート追加などの基本的な設定や動作を確認していきます。
構成について
パブリックサブネット上でEC2にKongをインストールして、Webページ表示用のEC2にアクセスします。
Webページ表示用EC2は既にあったものを使用したため、パブリックサブネットに配置されています。
ただ、プライベートサブネットに配置しても、今回のKongの設定自体は変わらないと思います。
Kongについて
Kongとは何かについては、少し古い記事ですが以下記事をご参照ください。
Kong Gateway周りの構成としては以下の図のようになっています。
Kong公式ページより引用
- Consumer:API呼び出しのプロキシの役割
- Route:クライアントからのリクエストとサービスをマッチさせるためのルールを定義
各ルートは1つのサービスに紐づけられる。1つのサービスに複数ルートを紐づけることも可能 - Service:アップストリームサービスのAPI
- AdminAPI:Consumer、Route、Service、Pluginの管理と設定を行う
Pluginによって、Lambdaとの接続やデータの変換など、様々な機能を導入することが可能です。
今回はOSS版を使用して、このAdminAPI経由で操作を行います。
ちなみに、AdminAPIがリッスンするデフォルトポートは8001です。
Kong用EC2の作成
公式ページを参考にして、EC2にKongをインストールします。
今回はDBレスモードで使用しないため、Kongの設定を保存するためのDBとしてPostgreSQLもインストールします。
# PostgreSQLのインストール $ sudo amazon-linux-extras install -y postgresql14 $ sudo yum install -y postgresql-server # PostgreSQLのデータベースクラスタの作成 $ sudo su - postgres -bash-4.2$ initdb -bash-4.2$ exit # PostgreSQLの起動(と起動設定) $ sudo systemctl start postgresql $ sudo systemctl enable postgresql # Kongのダウンロード/インストール $ curl -Lo kong-enterprise-edition-3.3.0.0.aws.amd64.rpm "https://download.konghq.com/gateway-3.x-amazonlinux-2/Packages/k/kong-enterprise-edition-3.3.0.0.aws.amd64.rpm" $ sudo yum install -y kong-enterprise-edition-3.3.0.0.aws.amd64.rpm # Kongのconfigファイルの準備 $ sudo cp /etc/kong/kong.conf.default /etc/kong/kong.conf # PostgreSQLへのユーザ作成、データベース作成 $ psql -U postgres postgres=# CREATE USER kong WITH PASSWORD 'super_secret'; CREATE DATABASE kong OWNER kong; postgres-# kong migrations bootstrap -c /etc/kong/kong.conf postgres-# \q # Kongの起動 $ sudo su - $ kong migrations bootstrap $ kong start Kong started # Kongの動作確認 $ curl http://localhost:8001/ {"version":"3.3.0.0",……}
Webページ表示用EC2の作成
Nginxなどをインストールして、アクセスしたときにWebページが表示できれば中身は何でも良いです。
今回は以下記事で作成したWebサーバを使用します。
Kongの設定
Service
まずはサービスを作成します。
AdminAPIに対して、POSTしてサービスの登録をします。
# サービスの登録 $ curl -X POST http://localhost:8001/services \ -d 'name=web-server' \ -d 'url=http://(宛先EC2のDNS名):8080/(パス)' # 登録されているサービスの確認 $ curl http://localhost:8001/services # (参考)サービスの削除 $ curl -X DELETE http://localhost:8001/services/(サービス名かサービスID)
Route
次にサービスに紐づくルートを作成します。
こちらも同様にAdminAPIに対して、POSTして登録します。
# ルートの作成 $ curl -X POST http://localhost:8001/services/web-server/routes \ -d 'paths[1]=/web' # 登録されているルートの確認 $ curl http://localhost:8001/routes # (参考)ルートの削除 $ curl -X DELETE http://localhost:8001/routes/(ルート名かルートID)
Log Level
今回の実装には不要ですが、ログレベルの設定も確認します。
# ログレベルの確認 $ curl http://localhost:8001/debug/node/log-level {"message":"log level: notice"} # ログレベルの変更 $ curl -X PUT http://localhost:8001/debug/node/log-level/debug {"message":"log level changed"} # ログレベルの確認 $ curl http://localhost:8001/debug/node/log-level {"message":"log level: debug"}
接続してみる
準備ができたため、Kong用EC2サーバで先ほど登録したサービスにアクセスします。
$ curl http://localhost:8000/web <h1>sora</h1> <h2>所属</h2> <p>営業統括本部 ゲームソリューショングループ ソリューションアーキテクト</p> <h2>今後ブログにしようと思っていること</h2> <ul> <li>CDK(Python)で出たエラー</li> <li>Goで色々作ってみた成果物</li> <li>構築したことのない構成やサービスをCDKで構築</li> </ul>
Kong用EC2からWebページ用EC2にアクセスすることができました。
最後に
今回は、「Kongの基本的な機能を触って、Kong経由でEC2上のWebサーバにアクセスしてみた」ことを記事にしました。
どなたかの参考になると幸いです。